using System;
using System.Collections.Generic;
using PluginScheduler.Jobs;

namespace PluginScheduler.Interfaces
{
    public interface IScheduler
    {
        string CurrentlyExecutingJobName { get; }

        bool IsShutdown { get; }

        void Start(TimeSpan startInterval);

        bool IsStarted { get; }

        void Standby();

        void Shutdown();

        void Shutdown(bool waitForJobsToComplete);
        
        void AddJob(IJobDetail jobDetail);

        void AddJob(IJobDetail jobDetail, bool replace);

        bool DeleteJob(JobKey jobKey);

        bool DeleteJobs(IList<JobKey> jobKeys);
        
        void PauseJob(JobKey jobKey);

        void ResumeJob(JobKey jobKey);

        void PauseAll();

        void ResumeAll();

        bool CheckExists(JobKey jobKey);

        void Clear();
    }
}